package com.chen.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.chen.dto.StudentExamChartDTO;
import com.chen.entity.Student;
import com.chen.vo.StudentLoginVO;
import com.chen.vo.StudentVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 学生Mapper
 */
public interface StudentMapper extends BaseMapper<Student> {

    /**
     * 通过学生账号查询学生信息
     * @param account
     * @return
     */
    default Student findByAccount(String account) {
        Wrapper<Student> queryWrapper = Wrappers.lambdaQuery(Student.class).eq(Student::getAccount, account);
        return selectOne(queryWrapper);
    }


    /**
     * 通过学生账号密码查询学生信息
     * @param account 学生登陆账号
     * @param pwd 密码
     * @return
     */
    StudentLoginVO findByAccountAndPwdLogin(@Param("account") String account, @Param("pwd") String pwd);

    /**
     * 总学生人数
     * @return
     */
    default Long findAllCount() {
        return selectCount(Wrappers.lambdaQuery(Student.class));
    }

    /**
     * 获取某班级学生人数
     * @param classId
     * @return
     */
    default Long findCountByClassesId(Integer classId) {
        Wrapper<Student> queryWrapper = Wrappers.lambdaQuery(Student.class).eq(Student::getClassesId, classId);
        return selectCount(queryWrapper);
    }

    /**
     * 更具班级查询学生信息
     * @param classId
     * @return
     */
    default List<Student> findByClassesId(Integer classId) {
        Wrapper<Student> queryWrapper = Wrappers.lambdaQuery(Student.class).eq(Student::getClassesId, classId);
        return selectList(queryWrapper);
    }

    /**
     * 分页查询学生信息
     * @param id
     * @param classId
     * @param gradeId
     * @param index
     * @param pageShow
     * @return
     */
    public List<StudentVO> listPage(@Param("id") Integer id, @Param("classId") Integer classId, @Param("gradeId") Integer gradeId, @Param("index") Integer index, @Param("pageShow") Integer pageShow);

    /**
     * 根据学生id获取学生详细信息
     * @param id
     * @return
     */
    public StudentVO getStudentById(@Param("id") Integer id);

    /**
     * 图标数据获取
     * @param classId
     * @return
     */
    public List<StudentExamChartDTO> getStudentsByClassIdCharData(@Param("classId") Integer classId);

}
